package com.example.day04.controller.sink;

public class FileSinkDemo1 {
//    String pathString = "/tmp"; // 输出文件路径
//    String charsetName = "UTF-8"; // 字符集编码
//    int bytes = 1024; // 每个部分的最大字节数（1MB）
//
//    // 创建 FileSink 实例
//    FileSink<Object> fileSink = FileSink.forRowFormat(
//                    new Path(pathString), // 指定路径
//                    new SimpleStringEncoder<>(charsetName)) // 指定编码
//            .withOutputFileConfig( // 输出文件的一些配置：文件名的前缀、后缀
//                    OutputFileConfig.builder()
//                            .withPartPrefix("atguigu_") // 文件名前缀
//                            .withPartSuffix(".log") // 文件名后缀
//                            .build())
//            .withBucketAssigner(new DateTimeBucketAssigner<>(formatString, ZoneId.of("Asia/Shanghai"))) // 按照目录分桶
//            .withRollingPolicy( // 文件滚动策略
//                    DefaultRollingPolicy.builder()
//                            .withRolloverInterval(Duration.ofSeconds(10)) // 滚动间隔（10 秒）
//                            .withMaxPartSize(new MemorySize(bytes * 1024)) // 最大部分大小（1MB）
//                            .build())
//            .build();
//
//    // 将数据流 sink 到文件系统
//    DataStreamGenerator<Object> dataGen = ...; // 假设已经有了一个数据流对象
//dataGen.sinkTo(fileSink);

    // 创建 JDBC Sink
//    JdbcSink jdbcSink = JdbcSink.sink(
//            "insert into ws values(?,?,?)",
//            new JdbcStatementBuilder<WaterSensor>() { // 收到一条 WaterSensor，如何填充占位符
//                @Override
//                public void accept(PreparedStatement preparedStatement, WaterSensor waterSensor) throws SQLException {
//                    preparedStatement.setString(1, waterSensor.getId()); // 注意：这里缺少了括号
//                    preparedStatement.setLong(2, waterSensor.getTs());
//                    preparedStatement.setInt(3, waterSensor.getVc());
//                }
//            },
//            .withMaxRetries(3)：这个选项指定了在写入数据库失败后的最大重试次数。如果写入操作失败，Flink 将尝试重新发送数据最多三次。默认情况下，没有设置重试次数，即不会自动重试。
//.withBatchSize(100)：这个选项指定了每次批量写入数据库的记录数。也就是说，每 100 条数据会被收集起来作为一个批次一起写入数据库。这样做的好处是可以提高写入性能，降低网络开销。默认值是 1，即单条写入。
//.withBatchIntervalMs(3000)：这个选项指定了批量写入的时间间隔。如果在该时间内收集到了足够的记录（由 withBatchSize 设置的数量），则会立即触发写入；否则，在达到时间间隔后也会触发写入。这里的 3000ms 即 3 秒钟。

//            JdbcExecutionOptions.builder()
//                    .withMaxRetries(3)
//                    .withBatchSize(100)
//                    .withBatchIntervalMs(3000)
//                    .build(),
//            new JdbcConnectionOptions.JdbcConnectionOptionsBuilder()
//                    .withUrl("jdbc:mysql://hadoop102:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8")
//                    .withUsername("root")
//                    .withPassword("000000")
//                    .withConnectionCheckTimeoutSeconds(60)
//                    .build());
//
//    // 将数据流 sink 到数据库
//    DataStream<WaterSensor> dataStream = ...; // 假设已经有了一个数据流对象
//dataStream.addSink(jdbcSink);
}
